#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QString>
#include <QByteArray>
#include <QValidator>
//#include <QRegExpValidator>

/*
 * 这是一个函数指针的使用示例  修改了文字编码  修改转换函数的指针   这样在每次转换的时候不用每次读取界面判断该如何转换
*/
MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    funcSwitch = switchUtf8;
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::switchUtf8(const QString &source, QByteArray &byteArray)
{
    byteArray = source.toUtf8();
}

void MainWindow::switchGbk(const QString &source, QByteArray &byteArray)
{
    byteArray = source.toLocal8Bit();
}

void MainWindow::switchHex(const QString &source, QByteArray &byteArray)
{
    byteArray = QByteArray::fromHex(source.toUtf8());
}


void MainWindow::on_pushButton_clicked()
{
    QByteArray byte;

    //假如这个转换函数频繁调用  5ms发送一次

    //方法1 每次需要检查当前转换编码
//    if(ui->radioButton_g){
//        byte = ui->textEdit_in->toPlainText().toUtf8();
//    }else{
//        byte = ui->textEdit_in->toPlainText().toLocal8Bit();
//    }


    //方法2 无需判断  仅在编码修改的时候设置转换函数即可
    funcSwitch(ui->textEdit_in->toPlainText(),byte);


//    //
//    if(ui->checkBox->isChecked()){
//        byte = QByteArray::fromHex(ui->textEdit_in->toPlainText().toUtf8());
//    }

    ui->textEdit_out->clear();
    ui->textEdit_out->append(byte.toHex(' '));
}

void MainWindow::on_radioButton_u_clicked(bool checked)
{
    if(checked){
        funcSwitch = switchUtf8;
    }
    on_pushButton_clicked();
}

void MainWindow::on_radioButton_g_clicked(bool checked)
{
    if(checked){
        funcSwitch = switchGbk;
    }
    on_pushButton_clicked();
}

void MainWindow::on_radioButton_hex_clicked(bool checked)
{
    if(checked){
        funcSwitch = switchHex;

//        QRegExp regx("[A-Fa-f0-9]{4}");
//        QValidator *validator = new QRegExpValidator(regx, ui->textEdit_in);
//        ui->textEdit_in->setValidator(validator);
    }
    on_pushButton_clicked();
}

void MainWindow::on_textEdit_in_textChanged()
{
    on_pushButton_clicked();
}
